package com.sunnyweather.android.ui.place

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations
import androidx.lifecycle.ViewModel
import com.sunnyweather.android.logic.Repository
import com.sunnyweather.android.logic.model.Place

class PlaceViewModel : ViewModel() {
    //观察者模式，此为发布者
    private val searchLiveData = MutableLiveData<String>()

    val placeList = ArrayList<Place>()

    /**
     * 可供外界访问的places数据
     * 是根据输入的一个地点查询到的相关的多个地点的集合
     * 是对于外界place数据的发布者
     * 也是对于内部searchLiveData的观察者
     * 在内部的searchLiveData发生变化时执行Repository.searchPlace
     * 类型： LiveData<Result<List<Place>>>
     */
    val placeLiveData = Transformations.switchMap(searchLiveData) { query ->
        Repository.searchPlaces(query)
    }

    /**
     * 是搜索框内输入的地址
     * 作为发布者的searchLiveData的值改变，
     * 触发它的观察者placeLiveData调用Transformation.switchMap方法
     * 以更新placeLiveData的数据
     */
    fun searchPlaces(query: String) {
        searchLiveData.value = query
    }

    /**
     * 执行保存地址操作
     */
    fun savePlace(place: Place) = Repository.savePlace(place)

    /**
     * 获取之前保存的地址
     */
    fun getSavedPlace() = Repository.gerSavedPlace()

    /**
     * 判断是否有之前保存的信息
     */
    fun isPlaceSaved() = Repository.isPlaceSaved()

}